home *** CD-ROM | disk | FTP | other *** search
/ TPUG - Toronto PET Users Group / TPUG Users Group CD / TPUG Users Group CD.iso / NEW / V-TPUG Programming Contest / (n)v1.d64 / cubic (.txt) < prev    next >
Commodore BASIC  |  2009-01-19  |  2KB  |  58 lines

  1. 100 PRINT "[147]"
  2. 110 PRINT"THE GENERALIZED CUBIC"
  3. 120 PRINT"EQUATION HAS THE FORM"
  4. 130 PRINT"A*X^3+B*X^2+C*X+D = 0":PRINT
  5. 140 PRINT"A,B,C,D ARE CALLED THE";:PRINT"  COEFFICIENTS. THIS"
  6. 150 PRINT"PROGRAM SOLVES FOR ALL";
  7. 160 PRINT"THREE VALUES OF X THAT";
  8. 170 PRINT"WILL SATISFY THE CUBIC";
  9. 180 PRINT" EQUATION FOR A GIVEN"
  10. 190 PRINT" SET OF COEFFICIENTS.":PRINT
  11. 200 PRINT"FOR SOME COEFFICIENTS,";
  12. 210 PRINT" 2 OF THE 3 SOLUTIONS"
  13. 220 PRINT"ARE COMPLEX CONJUGATES"
  14. 230 PRINT"IN THESE CASES WE USE"
  15. 240 PRINT "     ";CHR$(34);"J";CHR$(34);"=SQR(-1)"
  16. 250 PRINT:PRINT:PRINT"PRESS ANY KEY TO GO ON";
  17. 260 GET G$:IF G$="" THEN 260
  18. 270 PRINT"[147]"
  19. 280 PRINT"FOR THE CUBIC EQUATION":PRINT"THAT YOU WANT TO SOLVE"
  20. 290 PRINT"ENTER THE COEFFICIENTS"
  21. 300 PRINT"  STARTING WITH THE":PRINT:PRINT"      CUBIC TERM"
  22. 310 INPUT A1,A2,A3,A4
  23. 320 P=A2/A1:Q=A3/A1:R=A4/A1
  24. 330 A=(3*Q-P^2)/3:B=(2*P^3-9*P*Q+27*R)/27
  25. 340 D=B^2/4+A^3/27
  26. 350 BO=ABS(B^2/4)+ABS(A^3/27)
  27. 360 IF ABS(D)/BO<1E-7 THEN D=0
  28. 370 IF D>0 THEN PRINT"[147]THERE IS ONE REAL ROOT":PRINT" AND A CONJUGATE PAIR":GOSUB610
  29. 380 IF D=0 THEN PRINT"[147]THERE ARE THREE REAL":PRINT"ROOTS-AT LEAST 2 EQUAL":GOSUB610
  30. 390 IF D<0 THEN PRINT"[147] THERE ARE THREE REAL":PRINT"  AND UNEQUAL ROOTS":GOSUB610
  31. 400 AQ=-B/2+SQR(D):S=SGN(AQ):AQ=AQ*S
  32. 410 CA=S*EXP(LOG(AQ)/3)
  33. 420 BQ=-B/2-SQR(D):S=SGN(BQ):BQ=BQ*S
  34. 430 CB=S*EXP(LOG(BQ)/3)
  35. 440 PRINT "[147]   THE REAL ROOT IS"
  36. 450 PRINT TAB(3)CA+CB-P/3
  37. 460 PRINT " THE PAIRED ROOTS ARE"
  38. 470 IF D=0 THEN PRINT TAB(3)-(CA+CB)/2-P/3:GOTO 600
  39. 480 RE$=STR$(-(CA+CB)/2-P/3):RE$=RIGHT$(RE$,LEN(RE$)-1)
  40. 490 IM$=STR$(SQR(3)*(CA-CB)/2):IM$=RIGHT$(IM$,LEN(IM$)-1)
  41. 500 IFD>0THEN PRINT TAB(3)RE$;:IF(21-POS(X))>LEN(IM$)+3 THEN PRINT"+/-";IM$;"J":GOTO600
  42. 510 PRINT:PRINT TAB(5)"+/-";IM$;"J":GOTO600
  43. 520 CP=-B/2/SQR(-A^3/27)
  44. 530 PH=-ATN(CP/SQR(1-CP^2))+(null)/2
  45. 540 CM=2*SQR(-A/3)
  46. 550 X1=CM*COS(PH/3):X2=CM*COS((PH+2*(null))/3):X3=CM*COS((PH+4*(null))/3)
  47. 560 PRINT "[147] THE THREE ROOTS ARE"
  48. 570 PRINT TAB(3) X1-P/3
  49. 580 PRINT TAB(3) X2-P/3
  50. 590 PRINT TAB(3) X3-P/3
  51. 600 END
  52. 610 FOR J=1 TO 1500:NEXT
  53. 620 IF D<0 THEN 520
  54. 630 GOTO 400
  55. 640 RETURN
  56. 650 DATA234,234,234,96
  57. 660 PRINT TAB(3) X1-P/314 PRINT TAB(3) X2-P/3
  58.